const request = require('./request.js').default;

/**
 * 文件上传相关 API
 */
export const fileAPI = {
  /**
   * 上传图片文件
   * @param {Object} file - 图片文件对象，包含 path 属性
   */
  uploadImage: (file) => {
    return new Promise((resolve, reject) => {
      const config = require('../config/index.js').default;
      
      // 确保 file 对象存在且有 path 属性
      if (!file || !file.path) {
        reject(new Error('文件对象或文件路径不存在'));
        return;
      }
      
      wx.uploadFile({
        url: config.baseUrl + '/file/upload/image',
        filePath: file.path,
        name: 'file',
        success: (res) => {
          try {
            const data = JSON.parse(res.data);
            if (data.code === 200) {
              resolve(data.data);
            } else {
              reject(new Error(data.message || '上传失败'));
            }
          } catch (e) {
            reject(new Error('响应解析失败'));
          }
        },
        fail: (error) => {
          reject(error);
        }
      });
    });
  },

  /**
   * 获取封面素材列表
   * @param {number} imageType - 图片类型
   * @param {string} userId - 用户ID
   */
  getCovers: (imageType, userId) => request('/file/covers', 'GET', { imageType, userId }),

  /**
   * 上传封面图片
   * @param {File} file - 封面图片文件
   * @param {number} imageType - 图片类型
   * @param {string} userId - 用户ID
   */
  uploadCover: (file, imageType, userId) => {
    return new Promise((resolve, reject) => {
      const config = require('../config/index.js').default;
      
      // 确保 file 对象存在且有 path 属性
      if (!file || !file.path) {
        reject(new Error('文件对象或文件路径不存在'));
        return;
      }
      
      wx.uploadFile({
        url: config.baseUrl + '/file/upload/cover',
        filePath: file.path,
        name: 'file',
        formData: {
          imageType: imageType,
          userId: userId
        },
        success: (res) => {
          try {
            const data = JSON.parse(res.data);
            if (data.code === 200) {
              resolve(data.data);
            } else {
              reject(new Error(data.message || '上传失败'));
            }
          } catch (e) {
            reject(new Error('响应解析失败'));
          }
        },
        fail: (error) => {
          reject(error);
        }
      });
    });
  },
};
